<?php

namespace app\models;

use yii\db\ActiveRecord;

/**
 * 套餐
 * Class Package
 * @package app\models
 *
 * @property integer $id PK
 * @property string $name 名称
 * @property float $data 数据流量（B）
 * @property integer $sms 短信数量
 * @property integer $voice 语音（分钟）
 * @property float $price 费用
 * @property float $extra_data 超出流量（B）
 * @property float $extra_data_price 超出流量费用
 * @property float $extra_sms_price 超出短信费用
 * @property float $extra_voice_price 超出语音费用
 * @property integer $create_time 创建时间
 * @property string $remark 备注
 */
class Package extends ActiveRecord
{
    /**
     * @inheritdoc
     */
    public function rules()
    {
        return [
            [['name', 'data', 'sms', 'voice', 'price', 'extra_data', 'extra_data_price', 'extra_sms_price', 'extra_voice_price'], 'required'],
            ['remark', 'safe'],
            [['data', 'extra_data'], function ($attr) {
                if (preg_match('/^\d+\s?TB?$/', $this->$attr)) {
                    $this->$attr = preg_replace('/\D/', '', $this->$attr) * 1000 . ' GB';
                }
                if (preg_match('/^\d+\s?TiB?$/', $this->$attr)) {
                    $this->$attr = preg_replace('/\D/', '', $this->$attr) * 1024 . ' GiB';
                }
                if (preg_match('/^\d+\s?GB?$/', $this->$attr)) {
                    $this->$attr = preg_replace('/\D/', '', $this->$attr) * 1000 . ' MB';
                }
                if (preg_match('/^\d+\s?GiB?$/', $this->$attr)) {
                    $this->$attr = preg_replace('/\D/', '', $this->$attr) * 1024 . ' MiB';
                }
                if (preg_match('/^\d+\s?MB?$/', $this->$attr)) {
                    $this->$attr = preg_replace('/\D/', '', $this->$attr) * 1000 . ' KB';
                }
                if (preg_match('/^\d+\s?MiB?$/', $this->$attr)) {
                    $this->$attr = preg_replace('/\D/', '', $this->$attr) * 1024 . ' KiB';
                }
                if (preg_match('/^\d+\s?KB?$/', $this->$attr)) {
                    $this->$attr = preg_replace('/\D/', '', $this->$attr) * 1000;
                }
                if (preg_match('/^\d+\s?KiB?$/', $this->$attr)) {
                    $this->$attr = preg_replace('/\D/', '', $this->$attr) * 1024;
                }
                if (!preg_match('/^\d+\.?\d*$/', $this->$attr)) {
                    $this->addError($attr, '数量填写错误。');
                }
            }],
        ];
    }

    /**
     * @inheritdoc
     */
    public function attributeLabels()
    {
        return [
            'name' => '名称',
            'data' => '数据流量（B）',
            'sms' => '短信条数',
            'voice' => '语音时长（分钟）',
            'price' => '价格（每自然月）',
            'extra_data' => '超出流量（B）',
            'extra_data_price' => '超出流量价格',
            'extra_sms_price' => '超出短信价格（每条）',
            'extra_voice_price' => '超出短信价格（每分钟）',
            'remark' => '备注',
        ];
    }

    /**
     * 根据卡信息获取实际价格（用户套餐或代理商套餐）
     * @param Card $card 卡
     * @return string decimal(20,4)
     */
    public function getRealPrice($card)
    {
        if (!empty($card->uid)) {
            // 查找卡所属用户套餐
            $userPackage = UserPackage::findOne(['uid' => $card->uid, 'package_id' => $card->package_id]);
            if (!empty($userPackage)) {
                return $userPackage->cost_price;
            }
        }
        if (!empty($card->agent_id)) {
            // 查找卡所属代理商套餐
            $agentPackage = AgentPackage::findOne(['agent_id' => $card->agent_id, 'package_id' => $card->package_id]);
            if (!empty($agentPackage)) {
                return $agentPackage->sale_price;
            }
        }
        return $this->price;
    }
}
